Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

2023-ACL-Compressing Context to Enhance Inference Efficiency of Large Language Models

https://arxiv.org/abs/2310.06201

Introduction

LLMの回答を音声合成して発声したいが、内容や文脈や解答のガイドラインを踏まえて声にしたい。しかし、現状ではLLMへの指示が多すぎて、プロンプトが長くそれに応じてお金がどんどんかかる。

しかし、すでにLLMが知っている知識についてプロンプトに入れなくていい。これをうまいこと残す/消すを考えて、トークンの圧縮を考えたい。

Image in a image block

LLM自身に、知っている知識の部分をPromptから削除させることができる。そして、そうやって洗練させたプロンプトを末永く使っていくことによって、(最初のpruningでお金がかかっても)ゆくゆくはToken数が減って全体的に節約できる。

Self-Information

一連の事象が与えられたときに時刻ttで起きる確率が低いほど、自己情報量が増える。ちなみに事故情報量は加算してもいい。

I(x)=log2Pr(xtx0,,xt1)I(x) = - \log_2 Pr(x_t|x_0, \cdots, x_{t-1})

ここで、x0,x_0, \cdotsがトークンだと考えると、自己情報量が高いトークンだけ与えたくないですか

だが、このままではまずい。現在のLLMのTokenizerは、irrelevantなどをir/rele/vantのように分割させてTokenにしている。恣意的に消すと、そもそもこの単語をを認識できなくなり、つらい。そこで、Lexical Unitという複数のTokenをまとめて残すなら残す、削除するなら削除する塊をかんがえる。

Method

自己情報量の計算は、LLMが各単語の条件付きの生成確率がわかっているのであれば、そのまま自己情報量を計算できて、それで低い値を持つデータを消せばいい。

条件付の生成確率自体は、Transformerが前のTokenを受けて、与えられたTokenの出力確率をモデルとして出力する以上、簡単に得られる。

どのようにLexical Unitを作るか

ひとまとまりで削除か残すかの単位となるLexical Unitはどう作るか?Natural Language Toolkitを使うことで実現できる。Lexical Unitの自己情報量は、Tokenの自己情報量は加算できることから、単純に足せばよい。

そして、これの自己情報量のが多い順から残していくことになる。

実際実験で57.2%のTokenだけ残るみたいなことに。

Experiments

  • だが残念なことに、冗長だと思われるものを削除したら、意外に性能も下がっちゃう。

Arxivの論文での削除の一例↓。濃い赤ほど情報量が濃い。

Image in a image block